class Storage {
  static DEFAULT_EXPIRES = 31536000000; // 365天，定义为静态常量，便于维护

  constructor() {
    this.storageName = 'expiredStorage';
  }

  /**
   * 设置缓存
   * @param {string} name 缓存名称
   * @param {any} value 缓存的值
   * @param {number} expires 缓存过期时间(秒)
   */
  set(name, value, expires) {
    let storages = this.getStorage(); // 统一处理存储的读取
    if (!storages) storages = {};

    storages[name] = {
      value,
      expires: storages[name]
        ? storages[name].expires
        : expires === undefined
          ? +new Date() + Storage.DEFAULT_EXPIRES
          : expires * 1000 + +new Date(),
    };

    localStorage.setItem(this.storageName, JSON.stringify(storages));
  }

  /**
   * 获取缓存
   * @param {string} name 缓存名称
   * @return 缓存值或null
   */
  get(name) {
    let storages = this.getStorage(); // 统一处理存储的读取
    if (!storages) return null;

    if (!storages[name]) {
      return null; // 不存在
    }

    console.log('log=====', storages[name].expires - new Date());
    if (+new Date() > storages[name].expires) {
      this.remove(name); // 存在但过期
      return null;
    }

    return storages[name].value;
  }

  /**
   * 移除对应缓存
   * @param {string} name 缓存名称
   */
  remove(name) {
    let storages = this.getStorage(); // 统一处理存储的读取
    if (!storages) return;

    delete storages[name];
    if (JSON.stringify(storages) === '{}') {
      this.clear(); // 缓存字段为空对象时，删除该字段
      return;
    }

    localStorage.setItem(this.storageName, JSON.stringify(storages)); // 直接使用localStorage，保证一致性
  }

  /**
   * 清除所有带过期时间的缓存
   */
  clear() {
    localStorage.removeItem(this.storageName);
  }

  /**
   * 封装获取storage的方法，增加代码的健壮性和可维护性
   * @returns {object|null} 存储对象或null
   */
  getStorage() {
    try {
      const item = localStorage.getItem(this.storageName);
      return item ? JSON.parse(item) : null;
    } catch (error) {
      console.error('[ControlStorage] Error accessing localStorage:', error);
      return null;
    }
  }
}

export default new Storage();
